home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / hp48_2 / disasm.tar / disasm / cvt.c < prev    next >
C/C++ Source or Header  |  1990-04-25  |  2KB  |  100 lines

  1. #include "dis48.h"
  2. #include <errno.h>
  3.  
  4. void
  5. #ifdef ANSI
  6. StuffNybble(char *mem, NAddr addr, Nybble n)
  7. #else
  8. StuffNybble(mem, addr, n)
  9. char    *mem;
  10. NAddr    addr;
  11. Nybble    n;
  12. #endif
  13. {
  14.     char    t;
  15.     
  16.     t = mem[addr >> 1] & ((addr & 1) ? 0x0f : 0xf0);
  17.     n &= 0xf;
  18.     if (addr & 1)
  19.         n <<= 4;
  20.         
  21.     mem[addr >> 1] = t | n;
  22. }
  23.  
  24. #define SIZE    262144
  25.  
  26. #ifdef ANSI
  27. main(int argc, char **argv)
  28. #else
  29. main(argc, argv)
  30. int    argc;
  31. char    **argv;
  32. #endif
  33. {
  34.     char    *p;
  35.     int    n;
  36.     FILE    *fp;
  37.     NAddr    addr, a;
  38.     char    buf[25];
  39.     char    *mem, *malloc();
  40.     
  41.     if ((mem = malloc(SIZE)) == NULL) {
  42.         fprintf(stderr, "malloc failed\n");
  43.         exit(1);
  44.     }
  45.     
  46.     argc--;
  47.     argv++;
  48.     addr = NOADDR;
  49.     while (argc > 0) {
  50.         if ((fp = fopen(argv[0], "r")) == NULL) {
  51.             fprintf(stderr, "fopen: %s %d\n", argv[0], errno);
  52.             continue;
  53.         }
  54.         
  55.         while (fread(buf, sizeof(char), sizeof(buf), fp) != NULL) {
  56.             if (sscanf(buf, "%*c%5x:", &a) != 1) {
  57.                 fprintf(stderr, "Format bad '%s'\n", buf);
  58.                 break;
  59.             }
  60.             
  61.             if (addr == NOADDR)
  62.                 addr = a;
  63.                 
  64.             else if (a != addr)
  65.                 fprintf(stderr, "\nAddr mismatch %x '%s'\n",
  66.                         addr, buf);
  67.                         
  68.             for (n = 16, p = &buf[7]; --n >= 0; p++, addr++) {
  69.                 if ((*p >= '0') && (*p <= '9'))
  70.                     *p -= '0';
  71.                     
  72.                 else if ((*p >= 'A') && (*p <= 'F'))
  73.                     *p -= 'A' - 10;
  74.                     
  75.                 else {
  76.                     fprintf(stderr, "Bad char '%c'\n", *p);
  77.                     break;
  78.                 }
  79.                 
  80.                 StuffNybble(mem, addr, *p);
  81.             }
  82.         }
  83.         
  84.         fclose(fp);
  85.         argc--;
  86.         argv++;
  87.     }
  88.     
  89.     if ((fp = fopen("dump.out", "w")) == NULL) {
  90.         fprintf(stderr, "fopen dump.out\n");
  91.         exit(1);
  92.     }
  93.     
  94.     if (fwrite(mem, sizeof(char), SIZE, fp) != SIZE)
  95.         fprintf(stderr, "fwrite\n");
  96.         
  97.     fclose(fp);
  98.     exit(0);
  99. }
  100.